package com.hrms.service.impl;

import com.hrms.domain.User;
import com.hrms.domain.web.LoginInfo;
import com.hrms.mapper.UserMapper;
import com.hrms.service.IUserService;
import com.hrms.utils.DateUtils;
import com.hrms.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用户Service业务层处理
 * 
 * @author 老詹
 * @date 2024-11-20
 */
@Service
public class UserServiceImpl implements IUserService 
{
    @Autowired
    private UserMapper userMapper;

    /**
     * 查询用户
     * 
     * @param id 用户主键
     * @return 用户
     */
    @Override
    public User selectUserById(Long id)
    {
        return userMapper.selectUserById(id);
    }

    /**
     * 查询用户列表
     * 
     * @param user 用户
     * @return 用户
     */
    @Override
    public List<User> selectUserList(User user)
    {
        return userMapper.selectUserList(user);
    }

    /**
     * 新增用户
     * 
     * @param user 用户
     * @return 结果
     */
    @Override
    public int register(User user)
    {
        user.setCreateTime(DateUtils.getNowDate());
        return userMapper.insertUser(user);
    }

    /**
     * 修改用户
     * 
     * @param user 用户
     * @return 结果
     */
    @Override
    public int updateUser(User user)
    {
        return userMapper.updateUser(user);
    }

    /**
     * 批量删除用户
     * 
     * @param ids 需要删除的用户主键
     * @return 结果
     */
    @Override
    public int deleteUserByIds(Long[] ids)
    {
        return userMapper.deleteUserByIds(ids);
    }

    /**
     * 删除用户信息
     * 
     * @param id 用户主键
     * @return 结果
     */
    @Override
    public int deleteUserById(Long id)
    {
        return userMapper.deleteUserById(id);
    }

    @Override
    public LoginInfo login(User user) {
        // 根据用户名和密码查询用户信息
        // TODO 此时要思考，密码是明文还是密文，如果是明文应该怎么修改
        User loginUser = userMapper.selectUserByUsernameAndPassword(user);
        if(loginUser != null){
            //1. 生成JWT令牌
            Map<String,Object> dataMap = new HashMap<>();
            dataMap.put("empNo", loginUser.getEmpNo());
            dataMap.put("empName", loginUser.getEmpName());
            dataMap.put("username", loginUser.getUsername());

            String jwt = JwtUtils.generateJwt(dataMap);

            LoginInfo loginInfo = new LoginInfo(loginUser.getEmpNo(), loginUser.getUsername(),loginUser.getEmpName(), jwt);
            return loginInfo;
        }
        return null;
    }
}
